/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.uniceub.fsw.tutorial.dao;
import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.tutorial.vo.AlunoDisciplinaVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Gabriel
 */

public class AlunoDisciplinaDAO extends BaseDAO<AlunoDisciplinaVO> {
    
    
        @Override
    public void inserir(AlunoDisciplinaVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("INSERT INTO TA_ALUNODISCIPLINA(CD_ALUNO, CD_DISCIPLINA, VL_MENCAO)");
        query.append("VALUES (?, ?, ?)");

        List<?> parametros = criarParametros(
                entidade.getAluno(),
                entidade.getCdDisciplina(),
                entidade.getVlMencao()
        );

        Integer idGerado = (Integer) executarInsercao(query.toString(), parametros);

        entidade.setIdAlunoDisciplina(idGerado);
    }
     @Override
    public void alterar(AlunoDisciplinaVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("UPDATE TA_ALUNODISCIPLINA SET VL_MENCAO = ?,");
	  query.append("CD_ALUNO = ?");
	  query.append("CD_DISCIPLINA = ?");
        query.append("WHERE ID_ALUNODISCIPLINA = ?");

        List<?> parametros = criarParametros(
                entidade.getVlMencao(),
                entidade.getCdAluno(),
                entidade.getCdDisciplina(),
                entidade.getIdAlunoDisciplina()
        );

        executarAlteracao(query.toString(), parametros);
    }
     
     @Override
    public void excluir(AlunoDisciplinaVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("DELETE FROM TA_ALUNODISCIPLINA");
        query.append("WHERE ID_ALUNODISCIPLINA = ?");

        executarAlteracao(query.toString(), criarParametros(entidade.getIdAlunoDisciplina()));
    }
@Override
    public AlunoDisciplinaVO consultarPorId(Serializable id) {

        AlunoDisciplinaVO alunoDisciplina = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TA_ALUNODISCIPLINA T WHERE T.ID_ALUNODISCIPLINA = ?");

        alunoDisciplina = consultarUm(query.toString(), criarParametros(id));

        return alunoDisciplina;
    }
@Override
    public List<AlunoDisciplinaVO> consultarPorExemplo(AlunoDisciplinaVO exemplo) {

        List<AlunoDisciplinaVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TA_ALUNODISCIPLINA T WHERE 1=1");

        mapearQueryParaExemplo(query, exemplo);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }
@Override
    protected AlunoDisciplinaVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        AlunoDisciplinaVO alunoDisciplina = new AlunoDisciplinaVO();
        
        alunoDisciplina.setIdAlunoDisciplina(rs.getInt("ID_ALUNODISCIPLINA"));
        alunoDisciplina.setVlMencao(rs.getString("VL_MENCAO"));
	alunoDisciplina.setCdAluno(rs.getInt("CD_ALUNO"));
	alunoDisciplina.setCdDisciplina(rs.getInt("CD_DISCIPLINA"));
        
        return alunoDisciplina;
    }
    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, AlunoDisciplinaVO exemplo) {

        if (exemplo.getVlMencao() != null && exemplo.getVlMencao().trim().length() > 0) {
            query.append("AND T.VL_MENCAO = ?");
            adicionarParametro("%" + exemplo.getVlMencao());
        }
	  if (exemplo.getCdAluno () != null) {
            query.append("AND T.CD_ALUNO = ?");
            adicionarParametro("%" + exemplo.getCdAluno ());
        }
	  if (exemplo.getCdDisciplina () != null) {
            query.append("AND T.CD_DISCIPLINA = ?");
            adicionarParametro("%" + exemplo.getCdDisciplina ());
        }
    }


}
